beansieve 账本整理工具
本文是 beansieve,一个 beancount 账本文件整理工具的简介。
2023-09-17
beansieve 是一个用于整理 beancount 账本的小工具。这个工具主要实现以下两个功能:
- 通过 将账单中包含特定账户的条目放到一个新账本文件中。
--type aggregate
- 通过 将特定时间范围内的 Transaction 条目保留到一个新账本文件中。
--type archive
项目可以在 Github 上查看。 使用
pip install beansieve
python -m beansieve
一些术语
- :操作类型,即
type
按账户拆分账本或aggregate
按时间范围归档账本;archive
- :源文件,即要操作的账本文件;
source
- :目标文件,即新生成的账本文件的保存目录;
dest
- :使用
rule
时用于指定聚合规则;aggregate
- :使用
keep
时用于指定保留时间范围。archive
Structure 输出文件的结构
运行该工具后会使用
include
── account.beancount # 账户相关指令,即 `open` 和 `close`
├── commodity.beancount # commodity 指令
├── custom.beancount # custom 指令(如 fava 中提供的 balance 指令)
├── document.beancount # document 指令
├── event.beancount # event 指令
├── history.beancount # 如果使用 `archive`,则 `keep` 范围外的 Transaction 会被移动到此文件夹中
├── main.beancount # 主账本文件,include 其他账本文件,如果使用 `archive` 则会包含 `keep` 范围内的 Transaction,如果使用 `aggregate` 则未匹配上的 Transaction 文件会被移动到此文件
├── note.beancount # note 指令
├── price.beancount # price 指令
├── <key>.beancount # 使用 `aggregate` 时按 `rule` 拆分出来的账本
└── query.beancount # query 指令
aggregate 的用法
使用
aggregate
--rule
<key>:<pattern>
<key>
<pattern>
,
例如下面的脚本会将 :
- 中账户名称匹配
posting
的 Transaction 移动到Income:US:ETrade:.*
文件;Etrade.beancount
- 中账户名称匹配
posting
的 Transaction 移动到Income:US:Babble:Salary
文件;Payroll.beancount
- 其他的 移动到
Transaction
文件;main.beancount
- 其他的 会按照
Directive
规则移动到特定的文件中。Structure
# generate sample beancount files
bean-example > .artifacts/example.beancount
bean-report .artifacts/example.beancount balances > .artifacts/example-balances.txt
# aggregate
rm -rf .artifacts/example_aggregate
python -m beansieve \
--type aggregate \
--source ".artifacts/example.beancount" \
--dest ".artifacts/example_aggregate" \
--rule "Etrade|Income:US:ETrade:.*,Payroll|Income:US:Babble:Salary"
bean-report .artifacts/example_aggregate/main.beancount balances > .artifacts/example_aggregate-balances.txt
archive 的用法
使用
archive
Transaction
main.beancount
Transaction
history.beancount
--keep
1d
main.beancount
1w
1m
- 从当前时刻起前 7 天的 移动到
Transaction
文件;main.beancount
- 其他 移动到
Transaction
文件;history.beancount
- 其他的 会按照
Directive
规则移动到特定的文件中。Structure
# generate sample beancount files
bean-example > .artifacts/example.beancount
bean-report .artifacts/example.beancount balances > .artifacts/example-balances.txt
rm -rf .artifacts/example_archive
python -m beansieve \
--type archive \
--source ".artifacts/example.beancount" \
--dest ".artifacts/example_archive" \
--keep 7d
bean-report .artifacts/example_archive/main.beancount balances > .artifacts/example_archive-balances.txt
注意
- 这个工具不能保证输入()文件结构的完整性,因此如果有使用
--source
拆分账本文件的习惯,请先确保你认同include
的拆分规则;Structure
- 和
aggregate
这两个命令不能同时使用。对我而言只是当有拆分archive
的时候才会使用Transaction
拆分账本,更多时候是通过aggregate
来确保最近一段时间的账本文件(archive
)足够精简;main.beancount
- 使用前做好备份,以防止数据丢失,在使用前后使用 生成
bean-report
报表进行对比,可以确保转换无误。balances